﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Config;
using Library;
using Utils;

namespace WebTriple7.Class
{
    public class ApiGoPayment
    {
        public AccountBalance GetBalance()
        {

            long paygateId = Convert.ToInt64(UserUtils.UserName);
            string paygateName = UserUtils.FullName;
            string accessToken = UserUtils.GoPlayAccessToken;
            string strResult = "";
            try
            {
                string str = string.Format(Config.Global.Settings.GET_BLANCE_URL, accessToken, Config.Global.Settings.API_ISTEST);                
                strResult = Lib.SendRequest(str, "GET", null);                
                var result = Newtonsoft.Json.JsonConvert.DeserializeObject<Result<Blance>>(strResult);                

                var blance = result._data;
                if (result._code > 0)
                {
                    return new AccountBalance(paygateName, paygateId, blance.TotalVcoinGame, blance.TotalVcoinPayment,
                                              blance.TotalVcoinGame + blance.TotalVcoinPayment, strResult);
                }

                return new AccountBalance(paygateName, paygateId, -1, -1, -1, strResult);
                
            }
            catch (Exception ex)
            {
                return new AccountBalance(paygateName, paygateId, -1, -1, -1, strResult);
            }
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="vcoin"></param>
        /// <param name="transactionType"></param>
        /// <param name="objectId"></param>
        /// <returns>
        /// -5	Chữ ký điện tử không hợp lệ
        ///-6	Giao dịch đã hết thời gian thực hiện
        ///-48	Tài khoản bị block
        ///-49	Tài khoản chưa được active
        ///-50	Tài khoản không tồn tại
        ///-51	Tài khoản không đủ VCoin để thực hiện giao dịch
        ///-52	Giá sản phẩm không hợp lệ(ItemPrice bé hơn  0)
        ///-60	Số tiền không hợp lệ(MoneyPartner,...)
        ///-62	Tài khoản cược không đủ tiền
        ///-99	Lỗi transaction trên hệ thống ebank
        ///-100	Không tồn tại mã dịch vụ
        ///-101	Mã dịch vụ không hợp lệ
        ///-102	AccessToken không hợp lệ
        ///-103	AccessToken hết thời hạn hiệu lực
        ///-999	Lỗi hệ thống webservice
        /// </returns>
        public Result<BuyItem> DeductVcoin(int vcoin, int _itemcode, long _transId, string otp)
        {
            string accessToken = UserUtils.GoPlayAccessToken;
            string ip = Lib.GetAddressIp();
            string strResult = "";
            try
            {
                var sMakerCode = Config.Global.Settings.MAKER_CODE;
                var sMd5Key = Config.Global.Settings.MD5_KEY;
                var sServicesID = Config.Global.Settings.SERVICE_APPID;
                var sServicesKey = Config.Global.Settings.SERVICE_KEY;

                var input = new
                                {
                                    itemcode = _itemcode,
                                    itemprice = vcoin,
                                    accountIP = ip,
                                    makercode = sMakerCode,
                                    serviceAppId = sServicesID,
                                    serviceKey = sServicesKey,
                                    md5key = sMd5Key,
                                    transdate = DateTime.Now.ToString("yyyyMMddhhmmss"),
                                    transId = _transId,
                                    OTP = otp,
                                    isTest = Config.Global.Settings.API_ISTEST
                                };
                //Url
                string str = string.Format(Config.Global.Settings.BUYITEMS_URL, accessToken);

                //Encode Input
                string jInput = Newtonsoft.Json.JsonConvert.SerializeObject(input);
               

                //Post data
                strResult = Lib.PostData(str, jInput, "POST");                

                return Newtonsoft.Json.JsonConvert.DeserializeObject<Result<BuyItem>>(strResult);                
                
            }
            catch (Exception ex)
            {
                return new Result<BuyItem>() {_code = -1000, _message = ex.Message};
            }
        }
        /// <summary>
        /// Hàm trả thưởng
        /// </summary>
        /// <param name="vndOut"></param>
        /// <param name="_transId"></param>
        /// <returns>
        /// -5	Chữ ký điện tử không hợp lệ
        ///-6	Giao dịch đã hết thời gian thực hiện
        ///-48	Tài khoản bị block
        ///-49	Tài khoản chưa được active
        ///-50	Tài khoản không tồn tại
        ///-51	Tài khoản không đủ VCoin để thực hiện giao dịch
        ///-52	Giá sản phẩm không hợp lệ(ItemPrice bé hơn  0)
        ///-60	Số tiền không hợp lệ(MoneyPartner,...)
        ///-62	Tài khoản cược không đủ tiền
        ///-99	Lỗi transaction trên hệ thống ebank
        ///-100	Không tồn tại mã dịch vụ
        ///-101	Mã dịch vụ không hợp lệ
        ///-102	AccessToken không hợp lệ
        ///-103	AccessToken hết thời hạn hiệu lực
        ///-999	Lỗi hệ thống webservice
        /// </returns>
        public Result<InputMoneyBetting> InputMoneyBetting(int vndOut, long _transId)
        {
            string accessToken = UserUtils.GoPlayAccessToken;
            string ip = Lib.GetAddressIp();
            string strResult = "";
            try
            {
                var sMakerCode = Config.Global.Settings.MAKER_CODE;
                var sMd5Key = Config.Global.Settings.MD5_KEY;
                var sServicesID = Config.Global.Settings.SERVICE_APPID;
                var sServicesKey = Config.Global.Settings.SERVICE_KEY;

                var input = new
                {
                    serviceAppId =sServicesID,
                    ServiceKey =sServicesKey,
                    MakerCode =sMakerCode,
                    TransID =_transId,
                    AccountIP =ip,
                    MoneyPartner = vndOut,
                    Md5Key =sMd5Key,
                    isTest = Config.Global.Settings.API_ISTEST
                };
                //Url
                string str = string.Format(Config.Global.Settings.INPUTMONEYBETTING_URL, accessToken);

                //Encode Input
                string jInput = Newtonsoft.Json.JsonConvert.SerializeObject(input);


                //Post data
                strResult = Lib.PostData(str, jInput, "POST");

                return Newtonsoft.Json.JsonConvert.DeserializeObject<Result<InputMoneyBetting>>(strResult);

            }
            catch (Exception ex)
            {
                return new Result<InputMoneyBetting>() { _code = -1000, _message = ex.Message };
            }
        }
    }

    public class Result<T>
    {
        public int _code { get; set; }
        public T _data { get; set; }
        public string _message { get; set; }
    }
    public class Blance
    {
        public int ResponseCode { get; set; }
        public int TotalVcoinGame { get; set; }
        public int TotalVcoinPayment { get; set; }
        public string Sign { get; set; }
    }
    public class BuyItem
    {
        public int ResponseCode { get; set; }
        public int TransID { get; set; }
        public int TotalVcoinPayment { get; set; }
        public int TotalVcoinGame { get; set; }
        public string Sign { get; set; }
    }
    public class InputMoneyBetting
    {
        public string ResponseCode { get; set; }
        public string MoneyBetting { get; set; }
        public string TransID { get; set; }
        public int Gift { get; set; }
        public string Vcoin { get; set; }
        public int TotalVcoin { get; set; }
        public string Sign { get; set; }        
        
    }

    //public class AccessToken
    //{
    //    public string access_token { get; set; }
    //    public string code { get; set; }
    //    public string expires { get; set; }
    //    public string User { get; set; }
    //    public long UserId { get; set; }
    //}

}
